#include<vector>
class Heap { //大根堆
    // int size;
    std::vector<int> con;
    void adjust_down(int parent)
    {
        size_t child=(parent>>1)+1;

        while(child<con.size())
        {
            if(child+1<con.size()&&con[child]<con[child+1])
            ++child;

            if(con[child]>con[parent])
            {
                std::swap(con[child], con[parent]);
                parent=child;
                child=(parent>>1)+1;
            }
            else break;
        }
        
    }

        void adjust_up(int child)
        {
            int parent=(child-1)>>1;
            while(child>0)
            {
                if(con[child]>con[parent])
                {
                    std::swap(con[child], con[parent]);
                    child=parent;
                    parent=(child-1)>>1;
                }
                else break;
            }
        }

        void push(int x)
        {
            con.push_back(x);
            adjust_up(con.size()-1);
        }

        void pop()
        {
            // swap(con[0], con[con.size()-1]);
            con.pop_back();
            adjust_down(0);
        }

        int top()
        {
            return con[0];
        }
};